<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>保存调用this</title>
</head>
<body>
    <script>

        /* 
          当闭包的外层函数使用call的方式指定了一个对象去调用
          那么外层函数的调用者是这个指定的对象
          但是内层函数的调用者是window
        
        */
        function foo(){
            var num = 12;
            console.log(this);

            function fpp(){
                console.log(this);
                console.log(num);
            }
            return fpp;
        }

        var tyu = foo();//window
        tyu();  //window
        console.log("---------------------")

        var obj= new Object();
        var res = foo.call(obj);  //obj
        res();  //window


        console.log("====================================");



        /* 
          解决闭包中内外函数this指定的不一致的情况
        */

        function rto(){
            var num =12;
            console.log(this);
            console.log(num);
            /* 使用中介变量将调用外层函数的对象进行保存
               让内部函数得以复用 
            */

            var that =this; 
            function ght(){
                console.log(that);
                console.log(num);
            }
            return ght;
        }

        var wer =rto.call(obj);
        wer();






    </script>
</body>
</html>